import { defineConfig, loadEnv, type ConfigEnv } from "vite";
import { resolve } from "path";

import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";
import viteMock from "vite-easy-mock";

/*
首页mock数据
1.下载 npm i vite-easy-mock
2.在 vite.config.ts 引入 & 配置
  import viteMock from "vite-easy-mock";
   viteMock({
      dir: "",
      pattern: "/mock", // /mock开头的请求会被拦截
    }),
3.mock/home/data.json
4.定义用来请求 mock 服务的请求函数
    utils/request-mock.ts,请求前缀
5.定义环境变量
  .env.development/写：VITE_MOCK_API_URL = '/mock'
6.定义接口函数  getHomeDataApi
7.组件使用 onMounted
*/

// https://vitejs.dev/config/
export default defineConfig((mode: ConfigEnv) => {
  const env = loadEnv(mode.mode, process.cwd());
  console.log(env); // { VITE_PORT: '8888', VITE_OPEN: 'true', VITE_API_URL: '/app-dev' }

  return {
    plugins: [
      vue(),
      vueJsx(),
      viteMock({
        dir: "",
        pattern: "/mock", // /mock开头的请求会被拦截
      }),
    ],
    resolve: {
      // 配置路径别名
      alias: {
        "@": resolve(__dirname, "src"),
      },
      // 配置文件扩展名
      extensions: [".ts", ".vue", ".js", ".jsx", ".tsx"], // 导入时想要省略的扩展名列表。
    },
    css: {
      preprocessorOptions: {
        scss: {
          // 引入 var.scss 这样就可以在全局中使用 var.scss中预定义的变量了
          // 给导入的路径最后加上 ;
          additionalData: '@import "./src/styles/variables.scss";',
        },
      },
      postcss: {
        plugins: [
          {
            postcssPlugin: "internal:charset-removal",
            AtRule: {
              charset: (atRule) => {
                if (atRule.name === "charset") {
                  atRule.remove();
                }
              },
            },
          },
        ],
      },
    },
    // 开发服务器
    server: {
      // 代理
      proxy: {
        // 根据环境变量 动态获取前缀
        // [env.VITE_API_URL]: {
        //   target: "http://gmall-h5-api.atguigu.cn", // 目标服务器（看文档）
        //   changeOrigin: true, // 允许跨域
        //   rewrite: (path) =>
        //     path.replace(new RegExp("^" + env.VITE_API_URL), ""), // 路径重写（看接口是否有前缀，没有就要重写） /^\/app-dev/
        // },
        // 在不同的环境前缀不一样，服务器不一样
        // 前缀（看baseURL）这里是开发环境
        "/app-dev": {
          target: "http://gmall-h5-api.atguigu.cn", // 目标服务器（看文档）
          changeOrigin: true, // 允许跨域
          rewrite: (path) => path.replace(/^\/app-dev/, ""), // 路径重写（看接口是否有前缀，没有就要重写）
        },
      },
      post: +env.VITE_PORT, // 端口号
      open: env.VITE_OPEN === "true", // 自动打开
    },
  };
});
